package view.inventory
{
import core.model.PlayerModel;
import core.model.events.PlayerModelEvent;

import framework.core.TipManager;

import values.item.IItemValue;
import values.item.INumbericItemValue;

import view.component.render.AssetItemRenderProxy;

/**
 * InventoryItemRenderProxy
 * @author jliang
 * 
 */
public class InventoryItemRenderProxy extends AssetItemRenderProxy
{
	//==========================================================================
	//  Constructor
	//==========================================================================
	public function InventoryItemRenderProxy()
	{
		super();
	}
	//==========================================================================
	//  Variables
	//==========================================================================
	[Inject]
	public var playerModel:PlayerModel;
	//==========================================================================
	//  Overridden methods: RepeaterRenderProxy
	//==========================================================================
	override public function dispose():void
	{		
		if (vo) clearItemGroupEventListener(vo.key);
		
		super.dispose();
	}
	
	protected var vo:IItemValue;
	
	override public function set data(value:*):void
	{
		vo = value;
		
		icon.load(vo.template.getIconPathByKey("icon"));
		
		update();
		
		addItemGroupEventListener(vo.key);
		
		skin.buttonMode = true;
	}
	
	override public function get data():*
	{
		return vo;
	}
	
	override public function hide():void
	{
		super.hide();
		
		if (vo) clearItemGroupEventListener(vo.key);
	}
	
	override protected function onMouseOverHandler():void
	{
		InventoryItemUtil.showTip(skin, data);
	}
	
	override protected function onClickHandler():void
	{
		InventoryItemUtil.showMenu(skin, data);
	}
	//==========================================================================
	//  Protected methods
	//==========================================================================
	protected function addItemGroupEventListener(key:String):void
	{
		//playerModel.addEventListener(PlayerModelEvent.getItemNumChangedEventType(key), itemGroupNumChangedHandler);
	}
	
	protected function clearItemGroupEventListener(key:String):void
	{
		//playerModel.removeEventListener(PlayerModelEvent.getItemNumChangedEventType(key), itemGroupNumChangedHandler);
	}
	//==========================================================================
	//  Public methods
	//==========================================================================
	public function update():void
	{
		if (vo is INumbericItemValue)
		{
			skin.countLabel.text = INumbericItemValue(vo).num.toString();
		}
		else
		{
			skin.countLabel.text = "";
		}
	}
	//==========================================================================
	//  Event handlers
	//==========================================================================	
	protected function itemGroupNumChangedHandler(event:PlayerModelEvent):void
	{
		update();
	}
}
}


